/**
 * Controller
 * @version 1.0
 * Copyright: Wolna licencja
 */

package pl.put.io.code.core;

import java.io.IOException;
import java.util.List;

import pl.put.io.code.input.DataReader;
import pl.put.io.code.input.FileDataReader;

/**
 * Klasa Controller wczytuje pliki oraz pozwala generować zdania, a następnie je
 * wypisywać.
 * 
 * @author inf94337
 */
public class Controller {
    /** Zmienna przechowująca nazwę pliku z imionami. */
    public static final String NAMES_FILE_NAME = "names.txt";
    
    /** Zmienna przechowująca nazwę pliku z czynnościami. */
    public static final String ACTIVITIES_FILE_NAME = "activities.txt";
    
    /** Zmienna przechowująca nazwę pliku z miejscami. */
    public static final String PLACES_FILE_NAME = "places.txt";
    
    /** Pole przechowujące plik z imionami. */
    private DataReader namesDataReader;
    
    /** Pole przechowujące plik z czynnościami. */
    private DataReader activitiesDataReader;
    
    /** Pole przechowujące plik z miejscami. */
    private DataReader placesDataReader;

    /** 
     * Konstruktor przypisującym odpowiednim polom
     * obiekty z nazwami, czynnościami i miejscami. 
      */
    public Controller() {
	namesDataReader = new FileDataReader(NAMES_FILE_NAME);
	activitiesDataReader = new FileDataReader(ACTIVITIES_FILE_NAME);
	placesDataReader = new FileDataReader(PLACES_FILE_NAME);
    }
    
    /**
     * Metoda tworząca zdania i zapisująca je na liście. Następnie
     * zdania z listy są wypisywane.
     * 
     * @param numberOfSentences liczba zdań
     * 
     * @throws IOException
     */
    public void GenerateSentences(int numberOfSentences) throws IOException {
	SenteceCreater creator = new SenteceCreater(
		namesDataReader.readInput(), activitiesDataReader.readInput(),
		placesDataReader.readInput());
	final List<String> sentences = creator
		.createSentences(numberOfSentences);
	printSentences(sentences);
    }

    /**
     * Metoda wypisująca zdania z listy.
     * 
     * @param sentences lista zdań
     */
    private void printSentences(List<String> sentences) {
	for (String sentence : sentences) {
	    System.out.println(sentence);
	}

    }

}
